/*
* Copyright 2011 Pavel Kozhin 
*
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed  under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License.
*
* Author: Pavel Kozhin.
*/
package org.etherframework.core.reflection
{
	import flash.utils.Dictionary;

	public final class Metadata
	{
		private var _name:String;
		private var _properties:Vector.<MetadataProperty>;
		private var _map:Dictionary;
		
		public function Metadata(name:String, properties:Vector.<MetadataProperty>)
		{
			_name = name;
			_properties = properties;
		}

		public function get name():String { return _name; }
		public function get properties():Vector.<MetadataProperty> { return _properties; }
		public function getProperty(name:String):MetadataProperty 
		{ 
			if (!_properties)
				return null;
			
			if (!_map)
				_map = new Dictionary();
			
			if (_map[name] !== undefined)
				return _map[name];
			
			for each (var item:MetadataProperty in _properties)
			{
				if (item.key == name)
				{
					_map[name] = item;
					return item;
				}
			}
			
			_map[name] = null;
			return null; 
		}
	}
}